package com.asambleacristiana.repository.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import com.asambleacristiana.domain.Usuario;
import com.asambleacristiana.repository.dao.AbstractDAO;
import com.asambleacristiana.repository.dao.UsuarioDAO;

public class UsuarioDAOImpl extends AbstractDAO<Usuario> implements UsuarioDAO {

	private EntityManagerFactory entityManagerFactory = null;

	public UsuarioDAOImpl(EntityManagerFactory entityManagerFactory) {
		super(entityManagerFactory);
		this.entityManagerFactory = entityManagerFactory;
	}

	@Override
	public Usuario iniciarSesion(String apodo, String password) {
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		try {
			Query query = entityManager.createQuery("SELECT u FROM Usuario u WHERE u.apodo = :apodo AND u.password = :password");
			query.setParameter("apodo", apodo);
			query.setParameter("password", password);
			Usuario usuario = (Usuario) query.getSingleResult();
			if (!password.equals(usuario.getPassword())) {
				throw new NoResultException();
			}
			return usuario;
		} finally {
			entityManager.close();
		}
	}

	@Override
	public List<String> findPermisos(String usu) {
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		try {
			Query query = entityManager.createQuery(
					"select distinct p.descripcion " 
					+ "from Permiso p, RolPermiso rp, UsuarioRol ur "
					+ "WHERE  p = rp.permiso AND rp.rol = ur.rol " 
					+ "AND ur.usuario.apodo = :apodo");
			
			query.setParameter("apodo", usu);
			@SuppressWarnings("unchecked")
			List<String> permisos = (List<String>) query.getResultList();
			return permisos;
		} finally {
			entityManager.close();
		}
	}
}
